<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <script src="../vue.js"></script>
    <style>
        .v-enter,
        .v-leave-to{
            opacity:0;
        }
        .v-enter-active,
        .v-leave-active{
            transition:opacity 1s;
        }
    </style>
</head>
<body>
<div id="app">
    <!--动画标签-->
    <fade :show="show">
        <div>hello world</div>
    </fade>
    <!--复用动画-->
    <fade :show="show">
        <h1>hello world</h1>
    </fade>
    <button @click="handleClick">切换</button>
</div>

<script>
//    封装动画
    Vue.component('fade',{
        props:['show'],
        template:`<transition
        @before-enter="handleBeforeEnter"
        @enter="handleEnter">
        <slot v-if="show"></slot>
    </transition>`,
        methods:{
            handleBeforeEnter: function (el) {
                el.style.color='red'
            },
            handleEnter: function (el,done){
                setTimeout(()=>{
                    el.style.color='green'
                    done()
                },2000)
            }
        }
    })
    var vm = new Vue({
        el: "#app",
        data: {
            show:true
        },
        methods:{
            handleClick: function () {
                this.show=!this.show
            }
        }
    })
</script>
</body>
</html>